<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>闭包</title>
</head>

<body>
    <script>
    //  function test(x,x){
    // 	console.info(test.length);	//形参：定义时的形式参数
    // 	console.log(arguments);		//实参：实际给定的参数
    // 	console.log(x);
    // 	x=5;
    // 	console.log(arguments);		//实参：实际给定的参数
    // 	function x(){}
    // }
    // test(12,13,12,232);
    //形参和实参问题
    // //
    // var scope='glo';
    // (function t(){
    // 	console.log(scope);
    // 	var scope='loc';
    // 	console.log(scope);
    // })();
    // 恶心。。。
    //绑定，后面覆盖前面的，，，，，，，
    //为社么要给局部变量声明一个和全局变量一样的名字。。。
    //函数级别的作用域
    // 
    // 复制外面的执行期上下文，然后预编译加。。。
    // 递归调用时。复制定义时的作用域链
    //  
    //  函数ao 通过scope chain 连接起来 使得函数体内的变量都可以保存在函数的ao中，
    //  这样的特性 称为闭包？？？
    //  ao不释放 
    //  共有变量 缓存存储结构 封装 属性私有化 模块开发
    //  
    // 
    // function outer(){
    // 	var scope ='outer';
    // 	function inner(){
    // 		return scope;
    // 	}
    // 	return inner;
    // }
    // var fn=outer();
    // console.log(fn())
    // 
    // var count=0; 一个公有变量。。。
    // 
    // 实现一个公有变量接口。。。
    // function add(){
    // 	var count=0;
    // 	function addAction(){
    // 		count++;
    // 		console.log(count);
    // 		return count;
    // 	}
    // 	return addAction;
    // }
    // var mu=add();
    // mu();
    // mu();
    // 		// mu();
    // 		function add(){
    // 			var count=0;
    // 			function adActon(){
    // 				count++;
    // 				console.log(count)
    // 				return count;
    // 			}
    // 			function clAction(){
    // 				count=0;
    // 				console.log(count)
    // 				return count;
    // 			}
    // 			return [adActon,clAction]
    // 		}
    // var mi=add();
    // mi[0]()
    // mi[0]()
    // mi[0]()
    // mi[0]()
    // mi[0]()
    // mi[1]()
    // mi[0]()
    // mi[0]()
    // mi[0]()
    // 闭包 在这个函数中返回其子函数 子函数操作这个函数中的变量 保留当前函数的AO
    // function counter(){
    // 	var count=0;
    // 	var adder={
    // 		add:function(){
    // 			count++;
    // 			console.log(count)
    // 			return count;
    // 		},
    // 		cl:function(){
    // 			count=0;
    // 			console.log(count)
    // 			return count;
    // 		}
    // 	}
    // 	return adder;
    // }
    // var ii=counter();
    // ii.add()
    // ii.add()
    // ii.add()
    // ii.cl()
    // ii.add()
    // var jj=counter();
    // jj.add()
    // jj.add()
    // jj.cl()
    // jj.add()
    // jj.add()
    ////////////////////
    //  避免错误，或者更早的暴露错误 //
    ////////////////////
    // function outer(){
    // 	var result=new Array();
    // 	for(var i=0;i<2;i++){
    // 		result[i]=function (){
    // 			return i;
    // 		}
    // 	}
    // 	return result;
    // }
    // var fn=outer();
    // console.log(fn[0]());
    // console.log(fn[1]());

    

    </script>

</body>

</html>